﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Compras.Catalogos
{
    public class dbo_Cat_Proveedor
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Cat_Proveedor(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Proveedor(

            string Clave,
	        string Razon_Social,
	        string RFC_Proveedor,
	        string Nombre_Comercial,
	        int Id_GrupoProveedores,
	        int Id_Colaborador,
	        int Id_Terminos_Pago,
	        int Id_Moneda,
            double LimiteCredito,
	        string Calle,
	        string Num_Ext,
	        string Num_Int,
	        string Entre_Calle_1,
	        string Entre_Calle_2,
	        string Colonia,
	        string Referencia,
	        string Población,
	        string CP,
	        int Id_Estado,
	        int Id_Pais,
	        string Municipio
	        
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Proveedor
                                (                                
	                                Id_Proveedor,
	                                RFC,
	                                Clave,
	                                Razon_Social,
	                                RFC_Proveedor,
	                                Nombre_Comercial,
	                                Id_GrupoProveedores,
	                                Id_Colaborador,
	                                Id_Terminos_Pago,
	                                Id_Moneda,
	                                LimiteCredito,
	                                Calle,
	                                Num_Ext,
	                                Num_Int,
	                                Entre_Calle_1,
	                                Entre_Calle_2,
	                                Colonia,
	                                Referencia,
	                                Población,
	                                CP,
	                                Id_Estado,
	                                Id_Pais,
	                                Municipio,
	                                Fecha_Alta,
	                                Usuario_Alta,
	                                Fecha_Mantto,
	                                Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Proveedor') = 0, 1, DMax('Id_Proveedor', 'dbo_Cat_Proveedor') + 1),
                                '@@RFC',
	                            '@@Clave',
	                            '@@Razon_Social',
	                            '@@RFC_Proveedor',
	                            '@@Nombre_Comercial',
	                            @@Id_GrupoProveedores,
	                            @@Id_Colaborador,
	                            @@Id_Terminos_Pago,
	                            @@Id_Moneda,
	                            @@LimiteCredito,
	                            '@@Calle',
	                            '@@Num_Ext',
	                            '@@Num_Int',
	                            '@@Entre_Calle_1',
	                            '@@Entre_Calle_2',
	                            '@@Colonia',
	                            '@@Referencia',
	                            '@@Población',
	                            '@@CP',
	                            @@Id_Estado,
	                            @@Id_Pais,
	                            '@@Municipio',
	                            
                                NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                
                
                Query = Query.Replace("@@Clave", Clave);
                Query = Query.Replace("@@Razon_Social", Razon_Social);
                Query = Query.Replace("@@RFC_Proveedor", RFC_Proveedor);
                Query = Query.Replace("@@Nombre_Comercial", Nombre_Comercial);
                Query = Query.Replace("@@Id_GrupoProveedores", Id_GrupoProveedores.ToString());
                Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
                Query = Query.Replace("@@Id_Terminos_Pago", Id_Terminos_Pago.ToString());
                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@LimiteCredito", LimiteCredito.ToString());
                Query = Query.Replace("@@Calle", Calle);
                Query = Query.Replace("@@Num_Ext", Num_Ext);
                Query = Query.Replace("@@Num_Int", Num_Int);
                Query = Query.Replace("@@Entre_Calle_1", Entre_Calle_1);
                Query = Query.Replace("@@Entre_Calle_2", Entre_Calle_2);
                Query = Query.Replace("@@Colonia", Colonia);
                Query = Query.Replace("@@Referencia", Referencia);
                Query = Query.Replace("@@Población", Población);
                Query = Query.Replace("@@Id_Estado", Id_Estado.ToString());
                Query = Query.Replace("@@Id_Pais", Id_Pais.ToString());
                Query = Query.Replace("@@CP", CP);
                Query = Query.Replace("@@Municipio", Municipio);
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                Query = Query.Replace("@@RFC", this._RFC);

                return SrvDB.ExecuteQuery_Insert(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Proveedor_Por_Id(
            object Id,
           string Clave,
            string Razon_Social,
            string RFC_Proveedor,
            string Nombre_Comercial,
            int Id_GrupoProveedores,
            int Id_Colaborador,
            int Id_Terminos_Pago,
            int Id_Moneda,
            double LimiteCredito,
            string Calle,
            string Num_Ext,
            string Num_Int,
            string Entre_Calle_1,
            string Entre_Calle_2,
            string Colonia,
            string Referencia,
            string Población,
            string CP,
            int Id_Estado,
            int Id_Pais,
            string Municipio
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Proveedor SET
                                             
                                    Clave = '@@Clave',
	                                Razon_Social = '@@Razon_Social',
	                                RFC_Proveedor = '@@RFC_Proveedor',
	                                Nombre_Comercial = '@@Nombre_Comercial',
	                                Id_GrupoProveedores = @@Id_GrupoProveedores,
	                                Id_Colaborador = @@Id_Colaborador,
	                                Id_Terminos_Pago = @@Id_Terminos_Pago,
	                                Id_Moneda = @@Id_Moneda,
	                                LimiteCredito = @@LimiteCredito,
	                                Calle = '@@Calle',
	                                Num_Ext = '@@Num_Ext',
	                                Num_Int = '@@Num_Int',
	                                Entre_Calle_1 = '@@Entre_Calle_1',
	                                Entre_Calle_2 = '@@Entre_Calle_2',
	                                Colonia = '@@Colonia',
	                                Referencia= '@@Referencia',
	                                Población = '@@Población',
	                                CP = '@@CP',
	                                Id_Estado = @@Id_Estado,
	                                Id_Pais = @@Id_Pais,
	                                Municipio = '@@Municipio',	    
                                    Fecha_Mantto = NOW(),
                                    Usuario_Mantto = '@@Usuario_Mantto'

                                 WHERE Id_Proveedor = @@Id";

                Query = Query.Replace("@@Clave", Clave);
                Query = Query.Replace("@@Razon_Social", Razon_Social);
                Query = Query.Replace("@@RFC_Proveedor", RFC_Proveedor);
                Query = Query.Replace("@@Nombre_Comercial", Nombre_Comercial);
                Query = Query.Replace("@@Id_GrupoProveedores", Id_GrupoProveedores.ToString());
                Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
                Query = Query.Replace("@@Id_Terminos_Pago", Id_Terminos_Pago.ToString());
                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@LimiteCredito", LimiteCredito.ToString());
                Query = Query.Replace("@@Calle", Calle);
                Query = Query.Replace("@@Num_Ext", Num_Ext);
                Query = Query.Replace("@@Num_Int", Num_Int);
                Query = Query.Replace("@@Entre_Calle_1", Entre_Calle_1);
                Query = Query.Replace("@@Entre_Calle_2", Entre_Calle_2);
                Query = Query.Replace("@@Colonia", Colonia);
                Query = Query.Replace("@@Referencia", Referencia);
                Query = Query.Replace("@@Población", Población);
                Query = Query.Replace("@@Id_Estado", Id_Estado.ToString());
                Query = Query.Replace("@@Id_Pais", Id_Pais.ToString());
                Query = Query.Replace("@@CP", CP);
                Query = Query.Replace("@@Municipio", Municipio);
                
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Update(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Proveedor_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Proveedor 
                                    WHERE Id_Proveedor = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Delete(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Proveedors_Por_Id(object Id)
        {

            string Query = @"SELECT            
            
                                A1.*,
                                A2.Nombre AS Desc_Grupo_Proveedores,
								A3.Nombre AS Desc_Colaborador,
								A4.Nombre AS Desc_Terminos_Pago,
								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Estado,
								A7.Nombre AS Desc_Pais

                            FROM ((((((dbo_Cat_Proveedor AS A1
                            
                                INNER JOIN dbo_Cat_Grupo_Proveedores       AS A2 ON A1.Id_GrupoProveedores = A2.Id_GrupoProveedores)
                                INNER JOIN dbo_Cat_Colaborador       AS A3 ON A1.Id_Colaborador = A3.Id_Colaborador)
                                INNER JOIN dbo_Cat_Terminos_Pago       AS A4 ON A1.Id_Terminos_Pago = A4.Id_Terminos_Pago)
                                INNER JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A6 ON A1.Id_Estado = A6.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A7 ON A1.Id_Pais = A7.Id_SIIE_Pais)
            
                            WHERE A1.Id_Proveedor = @@Id";
            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Proveedors_Por_RFC(string RFC_Proveedor)
        {

            string Query = @"SELECT            
            
                                A1.*,
                                A2.Nombre AS Desc_Grupo_Proveedores,
								A3.Nombre AS Desc_Colaborador,
								A4.Nombre AS Desc_Terminos_Pago,
								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Estado,
								A7.Nombre AS Desc_Pais

                            FROM ((((((dbo_Cat_Proveedor AS A1
                            
                                INNER JOIN dbo_Cat_Grupo_Proveedores       AS A2 ON A1.Id_GrupoProveedores = A2.Id_GrupoProveedores)
                                INNER JOIN dbo_Cat_Colaborador       AS A3 ON A1.Id_Colaborador = A3.Id_Colaborador)
                                INNER JOIN dbo_Cat_Terminos_Pago       AS A4 ON A1.Id_Terminos_Pago = A4.Id_Terminos_Pago)
                                INNER JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A6 ON A1.Id_Estado = A6.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A7 ON A1.Id_Pais = A7.Id_SIIE_Pais)
            
                            WHERE A1.RFC_Proveedor = '@@RFC_Cliente' AND A1.RFC = '@@RFC'"; ;

            Query = Query.Replace("@@RFC_Proveedor", RFC_Proveedor);
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Proveedors_Por_Nombre(string Nombre)
        {

            string Query = @"SELECT            
            
                                A1.*,
                                A2.Nombre AS Desc_Grupo_Proveedores,
								A3.Nombre AS Desc_Colaborador,
								A4.Nombre AS Desc_Terminos_Pago,
								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Estado,
								A7.Nombre AS Desc_Pais

                            FROM ((((((dbo_Cat_Proveedor AS A1
                            
                                INNER JOIN dbo_Cat_Grupo_Proveedores       AS A2 ON A1.Id_GrupoProveedores = A2.Id_GrupoProveedores)
                                INNER JOIN dbo_Cat_Colaborador       AS A3 ON A1.Id_Colaborador = A3.Id_Colaborador)
                                INNER JOIN dbo_Cat_Terminos_Pago       AS A4 ON A1.Id_Terminos_Pago = A4.Id_Terminos_Pago)
                                INNER JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A6 ON A1.Id_Estado = A6.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A7 ON A1.Id_Pais = A7.Id_SIIE_Pais)
            
                            WHERE A1.Nombre = '@@Nombre' AND A1.RFC = '@@RFC'";

            Query = Query.Replace("@@Nombre", Nombre);
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Proveedors()
        {
            string Query = @"SELECT            
            
                                A1.*,
                                A2.Nombre AS Desc_Grupo_Proveedores,
								A3.Nombre AS Desc_Colaborador,
								A4.Nombre AS Desc_Terminos_Pago,
								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Estado,
								A7.Nombre AS Desc_Pais

                            FROM ((((((dbo_Cat_Proveedor AS A1
                            
                                INNER JOIN dbo_Cat_Grupo_Proveedores       AS A2 ON A1.Id_GrupoProveedores = A2.Id_GrupoProveedores)
                                INNER JOIN dbo_Cat_Colaborador       AS A3 ON A1.Id_Colaborador = A3.Id_Colaborador)
                                INNER JOIN dbo_Cat_Terminos_Pago       AS A4 ON A1.Id_Terminos_Pago = A4.Id_Terminos_Pago)
                                INNER JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A6 ON A1.Id_Estado = A6.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A7 ON A1.Id_Pais = A7.Id_SIIE_Pais)
            
                            WHERE A1.RFC = '@@RFC'";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Proveedores_AutoComplete()
        {
            string Query = @"SELECT Id_Proveedor, RFC_Proveedor + ' - ' + Razon_Social AS Complete FROM dbo_Cat_Proveedor
                            WHERE RFC = '@@RFC'";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report(int Id_GrupoProveedores)
        {
            string Query = @"

                SELECT    
    
	                a.RFC, 
	                a.Id_Proveedor, 
	                a.RFC_Proveedor, 
	                a.Razon_Social, 
	                a.Calle, 
	                a.Num_Ext, 
	                a.Num_Int, 
	                a.Colonia, 
	                a.CP, 
	                Estado_Proveedor.Nombre AS Estado, 
	                a.Municipio, 
	                Pais_Proveedor.Nombre AS Pais, 
                    a.Calle + ' ' + a.Num_Ext + ' ' + 
	
	                Switch(
		                a.Num_Int   IS NULL, ', COL. ',
		                true, a.Num_Int + ', COL. '
	                )

	                + a.Colonia + ', C.P. ' + a.CP + ', ' + a.Municipio + ', ' + Estado_Proveedor.Nombre AS Direccion, 	
	
	                a.Nombre_Comercial, 
	                a.Id_GrupoProveedores, 
                    dbo_Cat_Grupo_Proveedores.Nombre AS Grupo_Proveedores, 
	                a.Id_Colaborador, 
	                dbo_Cat_Colaborador.Nombre AS Colaborador, 
	                a.Id_Terminos_Pago, 
	                dbo_Cat_Terminos_Pago.Nombre AS Terminos_Pago, 
	                a.Id_Moneda, 
	                dbo_Cat_Moneda.Clave AS Moneda, 
	                a.LimiteCredito

                FROM
 
	                ((((((dbo_Cat_Proveedor AS a 
	                INNER JOIN 	dbo_Cat_Grupo_Proveedores ON a.Id_GrupoProveedores = dbo_Cat_Grupo_Proveedores.Id_GrupoProveedores)
	                INNER JOIN 	dbo_Cat_Colaborador ON a.Id_Colaborador = dbo_Cat_Colaborador.Id_Colaborador)
	                INNER JOIN 	dbo_Cat_Terminos_Pago ON a.Id_Terminos_Pago = dbo_Cat_Terminos_Pago.Id_Terminos_Pago)
	                INNER JOIN  dbo_Cat_Moneda ON a.Id_Moneda = dbo_Cat_Moneda.Id_Moneda)
	                INNER JOIN dbo_Cat_SIIE_Pais AS Pais_Proveedor ON Pais_Proveedor.Id_SIIE_Pais = a.Id_Pais)
	                INNER JOIN dbo_Cat_SIIE_Estado AS Estado_Proveedor ON Estado_Proveedor.Id_SIIE_Estado = a.Id_Estado)

                WHERE
   
                        a.RFC = '@@RFC' 
                    AND (@@Id_GrupoProveedores = -1 OR a.Id_GrupoProveedores = @@Id_GrupoProveedores)
            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_GrupoProveedores", Id_GrupoProveedores.ToString());


            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}
